home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / GIMP 2.6.8 / gimp-2.6.8-i686-setup.exe / {app} / share / gimp / 2.0 / scripts / line-nova.scm < prev    next >
Text File  |  2009-12-15  |  4KB  |  123 lines

  1. ;;; line-nova.scm for gimp-1.1 -*-scheme-*-
  2. ;;; Time-stamp: <1998/11/25 13:26:44 narazaki@gimp.org>
  3. ;;; Author Shuji Narazaki <narazaki@gimp.org>
  4. ;;; Version 0.7
  5.  
  6. (define (script-fu-line-nova img drw num-of-lines corn-deg offset variation)
  7.   (let* (
  8.         (*points* (cons-array (* 3 2) 'double))
  9.         (modulo fmod)                        ; in R4RS way
  10.         (pi/2 (/ *pi* 2))
  11.         (pi/4 (/ *pi* 4))
  12.         (pi3/4 (* 3 pi/4))
  13.         (pi5/4 (* 5 pi/4))
  14.         (pi3/2 (* 3 pi/2))
  15.         (pi7/4 (* 7 pi/4))
  16.         (2pi (* 2 *pi*))
  17.         (rad/deg (/ 2pi 360))
  18.         (variation/2 (/ variation 2))
  19.         (drw-width (car (gimp-drawable-width drw)))
  20.         (drw-height (car (gimp-drawable-height drw)))
  21.         (drw-offsets (gimp-drawable-offsets drw))
  22.         (old-selection FALSE)
  23.         (radius (max drw-height drw-width))
  24.         (index 0)
  25.         (dir-deg/line (/ 360 num-of-lines))
  26.         )
  27.  
  28.     (define (draw-vector beg-x beg-y direction)
  29.  
  30.       (define (set-point! index x y)
  31.             (aset *points* (* 2 index) x)
  32.             (aset *points* (+ (* 2 index) 1) y)
  33.       )
  34.       (define (deg->rad rad)
  35.             (* (modulo rad 360) rad/deg)
  36.       )
  37.       (define (set-marginal-point beg-x beg-y direction)
  38.         (let (
  39.              (dir1 (deg->rad (+ direction corn-deg)))
  40.              (dir2 (deg->rad (- direction corn-deg)))
  41.              )
  42.  
  43.           (define (aux dir index)
  44.                    (set-point! index
  45.                                (+ beg-x (* (cos dir) radius))
  46.                                (+ beg-y (* (sin dir) radius)))
  47.           )
  48.  
  49.           (aux dir1 1)
  50.           (aux dir2 2)
  51.         )
  52.       )
  53.  
  54.       (let (
  55.            (dir0 (deg->rad direction))
  56.            (off (+ offset (- (modulo (rand) variation) variation/2)))
  57.            )
  58.  
  59.         (set-point! 0
  60.                     (+ beg-x (* off (cos dir0)))
  61.                     (+ beg-y (* off (sin dir0)))
  62.         )
  63.         (set-marginal-point beg-x beg-y direction)
  64.         (gimp-free-select img 6 *points* CHANNEL-OP-ADD
  65.                           TRUE                ; antialias
  66.                           FALSE                ; feather
  67.                           0                    ; feather radius
  68.         )
  69.       )
  70.     )
  71.  
  72.     (gimp-image-undo-group-start img)
  73.  
  74.     (set! old-selection
  75.      (if (eq? (car (gimp-selection-is-empty img)) TRUE)
  76.          #f
  77.          (car (gimp-selection-save img))
  78.      )
  79.     )
  80.  
  81.     (gimp-selection-none img)
  82.     (srand (realtime))
  83.     (while (< index num-of-lines)
  84.       (draw-vector (+ (nth 0 drw-offsets) (/ drw-width 2))
  85.                    (+ (nth 1 drw-offsets) (/ drw-height 2))
  86.                    (* index dir-deg/line)
  87.       )
  88.       (set! index (+ index 1))
  89.     )
  90.     (gimp-edit-bucket-fill drw FG-BUCKET-FILL NORMAL-MODE 100 0 FALSE 0 0)
  91.  
  92.     (if old-selection
  93.       (begin
  94.         (gimp-selection-load old-selection)
  95.         ;; (gimp-image-set-active-layer img drw)
  96.         ;; delete extra channel by Sven Neumann <neumanns@uni-duesseldorf.de>
  97.         (gimp-image-remove-channel img old-selection)
  98.       )
  99.     )
  100.  
  101.     (gimp-image-undo-group-end img)
  102.     (gimp-displays-flush)
  103.   )
  104. )
  105.  
  106. (script-fu-register "script-fu-line-nova"
  107.   _"Line _Nova..."
  108.   _"Fill a layer with rays emanating outward from its center using the FG color"
  109.   "Shuji Narazaki <narazaki@gimp.org>"
  110.   "Shuji Narazaki"
  111.   "1997,1998"
  112.   "*"
  113.   SF-IMAGE       "Image"               0
  114.   SF-DRAWABLE    "Drawable"            0
  115.   SF-ADJUSTMENT _"Number of lines"     '(200 40 1000 1 1 0 1)
  116.   SF-ADJUSTMENT _"Sharpness (degrees)" '(1.0 0.0 10.0 0.1 1 1 1)
  117.   SF-ADJUSTMENT _"Offset radius"       '(100 0 2000 1 1 0 1)
  118.   SF-ADJUSTMENT _"Randomness"          '(30 1 2000 1 1 0 1)
  119. )
  120.  
  121. (script-fu-menu-register "script-fu-line-nova"
  122.                          "<Image>/Filters/Render")
  123.